package com.agent.config;

import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.rag.content.retriever.ContentRetriever;
import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;
import dev.langchain4j.store.embedding.EmbeddingStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/*
    内容检索器配置类

    用于将用户消息转换为检索向量，然后与向量数据库中的存储向量进行相似度匹配
 */

@Configuration
public class ContentRetrieverConfig {

    // 嵌入模型
    @Autowired
    private EmbeddingModel embeddingModel;
    // 向量数据库
    @Autowired
    private EmbeddingStore<TextSegment> embeddingStore;

    // 自定义基于 Pinecone 向量数据库的内容检索器，用于检索向量数据库中的内容
    @Bean
    public ContentRetriever contentRetrieverPinecone() {
        // EmbeddingStoreContentRetriever是LangChain4j框架提供的内容检索器，用于检索嵌入存储中的内容
        // 创建一个 EmbeddingStoreContentRetriever 对象，用于从嵌入存储中检索内容
        return EmbeddingStoreContentRetriever.builder()
                .embeddingModel(embeddingModel)// 指定用的嵌入模型
                .embeddingStore(embeddingStore)// 指定用的嵌入存储
                .maxResults(1)// 设置最大结果数，即最多返回多少个匹配结果
                .minScore(0.8)// 设置最小分数，即匹配结果的最低分数
                .build();
    }

}
